perm filename MIXO.FAI[TMP,LCS] blob
sn#177355 filedate 1975-08-20 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00011 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE MIXER
C00004 00003 CLRBFI
C00006 00004 DLAY: ADD DUR,BC1
C00008 00005 SPLICE: SETOM SFLG#
C00009 00006 IN1: IN 11,
C00011 00007 IN2: IN 2,
C00013 00008 GDLAY: CLRBFI
C00015 00009 NAME: 'MUSIC '
C00017 00010 GETNAM: MOVEI A,
C00018 00011 GETNUM: PUSHJ P,INNUM
C00020 ENDMK
C⊗;
TITLE MIXER
A←1 ↔ B←2 ↔ C←3 ↔ D←4 ↔ E←5
DUR←6 ↔ MAX←7 ↔ R1←10 ↔ R2←11
R3←12 ↔ BC1←13 ↔ BC2←14 ↔ BC3←15
P←17 ↔ NBUFS←←4
DEFINE FIXX(N)
< JUMPGE N,.+5
MOVNS N
FIX N,233000
MOVNS N
CAIA
FIX N,233000 >
DEFINE FLOAT(N)
< TLC N,232000
FADR N,N >
MIXER: MOVE P,[IOWD 20,PDL]
CLRBFI
OUTSTR [ASCIZ/
TYPE FIRST NAME : /]
SETZ BC1,
PUSHJ P,GNAME
OPEN 11,[14↔'DSK '↔BUF1]
JRST 4,.
INBUF 11,NBUFS
LOOKUP 11,FILNAM
JRST MIXER
AOJ BC1,
PUSHJ P,SECOND
JRST .-1
AOJ BC1,
CLRBFI
OUTSTR [ASCIZ/ NUMBER OF CHANNELS = /]
INCHWL A
PUSHJ P,INNUM
SKIPLE
CAILE 4
HRRZI 1
HRRZM NCHNLS#
CLRBFI
OUTSTR [ASCIZ/ SRATE = /]
INCHWL A
PUSHJ P,INNUM
SKIPN
HRRZI =10000
FLOAT(0)
MOVEM FSRATE#
PUSHJ P,GDLAY
GRAT: CLRBFI
OUTSTR [ASCIZ/ SPLICE OR RATIO (S OR <R1>:<R2>) = /]
INCHWL A
CAIE A,"s"
CAIN A,"S"
JRST SPLICE
SETZM SFLG#
PUSHJ P,GETNUM
SKIPG R1,
MOVE R1,[DOT5: =0.5]
FMPR R1,[=4096.]
FIXX(R1)
INCHRS A
JRST .+3
PUSHJ P,GETNUM
SKIPG R2,
MOVE R2,DOT5
FMPR R2,[=4096.]
FIXX(R2)
PUSHJ P,ONAME
AOJ BC2,
SETZ MAX,
SETOM DFLG#
DLAY: ADD DUR,BC1
CAML DUR,SNUM2#
JRST FIND
PUSHJ P,MOV
PUSHJ P,IN1
JRST DLAY
MOV: ILDB D,A
TDON D,[NEG: 777777774000]
LDB D,A
IMUL D,R1
ASH D,-14
CAMLE D,MAX
MOVE MAX,D
IDPB D,C
SOJLE BC3,MOVO
SOJG BC1,MOV
POPJ P,
MOVO: PUSHJ P,OBUF
SOJG BC1,MOV
POPJ P,
FIND: SOJ BC2,
SUB DUR,SNUM2
SUB BC1,DUR
SKIPLE BC1
PUSHJ P,MOV
SETFLG: SETZM DFLG
MOVE BC1,DUR
MOVE DUR,SNUM2
ADD DUR,BC2
MIX: ILDB D,A
TDON D,NEG
LDB D,A
ILDB E,B
TDON E,NEG
LDB E,B
IMUL D,R1
IMUL E,R2
ADD D,E
ASH D,-14
CAMLE D,MAX
MOVE MAX,D
IDPB D,C
SOJLE BC3,MIXO
CKIN: SOJLE BC1,MIXI
SOJG BC2,MIX
PUSHJ P,IN2
ADD DUR,BC2
JRST MIX
MIXO: PUSHJ P,OBUF
JRST CKIN
MIXI: PUSHJ P,IN1
JRST CKIN+1
SPLICE: SETOM SFLG#
PUSHJ P,ONAME
MOVE [SPLOP,,MAX]
BLT R3
SLOOP: ADD DUR,BC3
CAML DUR,SNUM2
JRST NXPART
PUSHJ P,MAX
PUSHJ P,OBUF
PUSHJ P,IN1
JRST SLOOP
SPLOP: ILDB D,A
IDPB D,C
SOJG BC3,MAX
POPJ P,
NXPART: SUB DURαsNUM2
SUB BC3,DUR
SKIPLE BC1,BC3
PUSHJ P,MAX
MOVE A,B
SKIPLE BC3,DUR
PUSHJ P,MAX
PUSHJ P,OBUF
EXCH DUR,SNUM2
FIL2: ADD DUR,BC2
SKIPLE BC3,BC1
PUSHJ P,MAX
PUSHJ P,IN2
MOVE A,B
SKIPLE BC3,SNUM2
PUSHJ P,MAX
PUSHJ P,OBUF
JRST FIL2
IN1: IN 11,
CAIA
JRST CKEOF
HRRZI BC1,3
IMUL BC1,BUF1+2
HRRZ A,BUF1+1
HRLI A,1400
POPJ P,
CKEOF: STATO 11,20000
JRST 4,.
SETOM EOF1
SKIPGE EOF2
JRST DONE
SKIPL SFLG
SKIPGE DFLG
JRST BREAK
PART2: MOVE R1,R2
SOJLE BC2,GMOR
MOVE BC1,BC2
MOVE A,B
PUSHJ P,MOV
GMOR: PUSHJ P,IN2
ADD DUR,BC2
JRST PART2+2
BREAK: SUB DUR,SNUM2
SKIPGE SFLG
JRST ZSPL
SETZ D,
ZRIT: IDPB D,C
SOJLE BC3,ZOB
AOJL DUR,ZRIT
MOVE DUR,SNUM2
JRST PART2
ZOB: PUSHJ P,OBUF
JRST ZRIT+2
ZSLOP: ADD DUR,BC3
JUMPG DUR,ZEND
HRLI C,-200
SETZM 1(C)
AOBJN C,.-1
PUSHJ P,OBUF
ZSPL: JUMPL DUR,ZSLOP
HRRZI BC1,600
JRST EQEND
ZEND: MOVE DUR
SUB BC3
MOVN BC1,
SETZ
IDPB C
AOJL .-1
EQEND: MOVE A,B
POP P,D
JRST FIL2-1
IN2: IN 2,
CAIA
JRST CKEOF2
HRRZI BC2,3
IMUL BC2,BUF2+2
HRRZ B,BUF2+1
HRLI B,1400
POPJ P,
CKEOF2: STATO 2,20000
JRST 4,.
SETOM EOF2
SKIPL EOF1
SKIPGE SFLG
JRST DONE
ADD DUR,BC1
PUSHJ P,MOV
PUSHJ P,IN1
JRST .-3
OBUF: HRRM C,BUF3+1
OUT
CAIA
JRST 4,.
HRRZI BC3,3
IMUL BC3,BUF3+2
HRRZ C,BUF3+1
HRLI C,1400
POPJ P,
SECOND: CLRBFI
OUTSTR [ASCIZ/ TYPE NEXT NAME : /]
PUSHJ P,GNAME
OPEN 2,[14↔'DSK '↔BUF2]
JRST 4,.
INBUF 2,NBUFS
LOOKUP 2,FILNAM
POPJ P,
AOS (P)
POPJ P,
ONAME: CLRBFI
OUTSTR [ASCIZ/ OUTPUT NAME : /]
PUSHJ P,GNAME
OPEN [14↔'DSK '↔BUF3,,0]
JRST 4,.
OUTBUF NBUFS
ENTER FILNAM
JRST ONAME
PUSHJ P,OBUF+1
SETZM EOF1#
SETZM EOF2#
SETZ DUR,
PUSHJ P,IN1
PUSHJ P,IN2
POPJ P,
GDLAY: CLRBFI
OUTSTR [ASCIZ/ DELAY TIME = /]
INCHWL A
PUSHJ P,GETNUM
HRRZ A,NCHNLS
FLOAT(A)
FMPR A
FMPR FSRATE
FIXX(0)
MOVEM SNUM2
POPJ P,
DONE: PUSHJ P,OBUF
SKIPGE SFLG
JRST CKNXT
RELEAS
OUTSTR [ASCIZ/
MAX AMPL = /]
MOVE MAX
PUSHJ P,OUTINT
PUSHJ P,PSTAT
EXIT
CKNXT: HRRZI ACBLK
BLT ACBLK+P
PUSHJ P,PSTAT
OUTSTR [64240,,0]
HRRZI BC1,1
PUSHJ P,SECOND
JRST SDON
PUSHJ P,GDLAY
HRLZI ACBLK
BLT P
CAMLE DUR,SNUM2
MOVEM DUR,SNUM2
JRST BREAK
SDON: RELEAS
EXIT
PSTAT: OUTSTR [ASCIZ/
NUMBER OF SAMPLES = /]
MOVE DUR
PUSHJ P,OUTINT
OUTSTR [ASCIZ/
TOTAL DUR = /]
IDIV DUR,NCHNLS
FLOAT(DUR)
FDVR DUR,FSRATE
MOVE DUR
FIXX(0)
PUSHJ P,OUTINT
HRRZI "."
OUTCHR
MOVE DUR
FIXX(DUR)
FLOAT(DUR)
FSBR DUR
FMPR [=10000.]
FIXX(0)
AOJ
IDIVI =10
PUSHJ P,OUTINT
POPJ P,
NAME: 'MUSIC '
'MUSAA '
'MUSIC '
EXT: 'MUS '
'DMD '
'MUS '
NONAM: SKIPL SFLG
MOVE A,NAME(BC1)
JRST GEXT
GNAME: SETZM FILEXT+1
SETZM FILPPN
MOVE A,EXT(BC1)
MOVEM A,FILEXT
PUSHJ P,GETNAM
JUMPE A,NONAM
GEXT: MOVEM A,FILNAM
CAIE C,"."
JRST NOEXTN
PUSHJ P,GETNAM
MOVEM A,FILEXT
NOEXTN: CAIE C,"["
JRST FFDX
PUSHJ P,GETP
HRLZM A,FILPPN
PUSHJ P,GETP
HRRM A,FILPPN
FFDX: INCHRW C
CAIE C,12
JRST FFDX
POPJ P,
GETNAM: MOVEI A,
MOVE B,[440600,,A]
GETNML: PUSHJ P,RCH
POPJ P,
SUBI C,40
TLNE B,770000
IDPB C,B
JRST GETNML
GETP: MOVEI A,
GETPL: PUSHJ P,RCH
POPJ P,
TRNE A,770000
JRST GETPL
LSH A,6
ADDI A,-40(C)
JRST GETPL
RCH: INCHWL C
CAIN C,42
JRST RCHQ
CAIE C,11
CAIN C," "
JRST RCH
CAIE C,"."
CAIN C,","
POPJ P,
CAIE C,"["
CAIN C,"]"
POPJ P,
RCHQR: CAIGE C,40
POPJ P,
CAIL C,"a"
CAILE C,"z"
CAIA
SUBI C,40
POPJ1: AOS (P)
POPJ P,
RCHQ: INCHWL C
JRST RCHQR
GETNUM: PUSHJ P,INNUM
FLOAT(0)
CAIE A,"."
POPJ P,
MOVE C,
INCHRS A
POPJ P,
PUSHJ P,INNUM
JUMPE NODP
FLOAT(0)
FMPR TABL(B)
NODP: FADR C
POPJ P,
TABL: =0.1
=0.01
=0.001
=0.0001
=0.00001
INNUM: SETZ
SETO B,
CAIL A,60
CAILE A,71
POPJ P,
IMULI =10
ADDI -60(A)
AOJ B,
INCHRS A
POPJ P,
JRST INNUM+2
OUTINT: HRRZI B,7
JUMPE OUTZ
IDIVI =10
ADDI A,60
HRRZM A,BLK(B)
SOJGE B,OUTINT+1
OCHR: OUTCHR BLK+1(B)
CAIGE B,6
AOJA B,OCHR
POPJ P,
OUTZ: CAIL B,7
HRLZI B,300000
JRST OCHR
FILNAM: 0
FILEXT: 0
0
FILPPN: 0
BUF1: BLOCK 3
BUF2: BLOCK 3
BUF3: BLOCK 3
PDL: BLOCK 44
ACBLK: BLOCK 20
BLK: BLOCK 10
END MIXER